#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>

using namespace std;

int main()
{
  // signal(2,SIG_IGN);/告诉操作系统忽略2号信号
  signal(2, SIG_DFL); // 告诉操作系统执行二号信号的默认动作

  // while (1)
  // {
  //   cout << "hello signal" << endl;
  //   sleep(1);
  // }
  // int a = 10;
  // int b = 0;
  // a /=b;
  // cout<<"a = "<<a<<endl;
  pid_t id = fork(); // 创建子进程
  if (id == 0)
  {
    // child
    int cnt = 500;
    while (cnt)
    {
      cout << "i am a child process,pid:" << getpid() << "cnt:" << cnt << endl;
      sleep(1);
      cnt--;
    }
    exit(0); // 子进程执行完了，自行退出
  }
  // father
  int status = 0;
  pid_t rid = waitpid(id, &status, 0); // 进程等待，防止僵尸进程
  if (rid == id)
  {
    cout << "child quit info,rid:" << rid << "exit code:" << ((status >> 8) & 0xFF) << "exit signal:" << (status & 0x7F)
         << "core dump:" << ((status >> 7) & 1) << endl;
    // core dump表示核心转储，云服务器默认关闭，一旦打开就会出现相应存储运行信息的文件
  }
}